package org.hilo.boot.mybatis;

import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;

/**
 * 在项目中引入依赖：
   <dependency>
      <groupId>org.hilo.boot</groupId>
      <artifactId>hilo-mybatis-generator</artifactId>
      <version>{打开Maven仓库查看最新版本}</version>
   </dependency>
 * 功能很强，有兴趣的自己去研究。。。
 * 官方地址：https://gitee.com/baomidou/mybatis-plus
 */
public class GenerateMojoTests4 {

    public static void main(String[] args) {
        GenerateMojo that = new GenerateMojo();
        // 【数据库】
        DataSourceConfig dataSource = new DataSourceConfig();
        dataSource.setDbType(DbType.MYSQL) // 数据库类型
                .setDriverName("com.mysql.jdbc.Driver").setUsername("zollty")
                .setPassword("Pub#1234")
                .setUrl("jdbc:mysql://192.168.66.11:3306/mydb?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8")
                // 自定义数据库表字段类型转换【可选】
                .setTypeConvert(new MySqlTypeConvert() {
                    @Override
                    public DbColumnType processTypeConvert(String fieldType) {
                        // System.out.println("转换类型：" + fieldType);
                         if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
                           return DbColumnType.BOOLEAN;
                         }
                        return super.processTypeConvert(fieldType);
                    }
                });

        // 【策略选项】
        StandStrategyConfig strategy = new StandStrategyConfig();
        strategy
                 .setTablePrefix(new String[] { "okr_" })// 此处可以修改为您的表前缀
//                .setInclude(new String[] { "s3ffjm_202203091500",
//                        "bj_project_static_massage_building_site",
//                        "bj_sys_setting" }) // 需要生成的表
//         .setExclude(new String[]{"tb_", "okr_"}) // 排除生成的表
        ;

        // 【包名】
        StandPackageConfig packageInfo = new StandPackageConfig();
        packageInfo
                // 父级包名称
                .setParent("com.zollty")
                // 模块名，完整包名 = parent + moduleName
                .setModuleName("okr"); // 包名：com.hilo.project.admin
        
        // 【其他配置】
        StandGlobalConfig global = new StandGlobalConfig();
        global.setOutputDir(
                // 输出目录
                "D:\\__SYNC2\\git\\hilo\\hilo-component\\hilo-mybatis-generator\\tmp")
                // 是否覆盖文件
                .setFileOverride(true)
                // 是否打开输出目录(默认true)
                .setOpen(false)
                // Web Controller 的 url base path 基础路径（可以不设置）
                // 完整URL=basePath/moduleName/表名，例如 
                // @RequestMapping("/app/admin/user")
                .setControllerBasePath("api");

        StandTemplateConfig tmpl = new StandTemplateConfig();
        //tmpl.setEntity("/templates/table.json");

        that.setGlobal(global);
        that.setDataSource(dataSource);
        that.setStrategy(strategy);
        that.setPackageInfo(packageInfo);
        that.setTemplate(tmpl);

        that.execute();
    }
}
